package com.hades.xq.single.kotlin

/**
 * 懒汉式
 * 优点:	只有第一次使用时，才会初始化对象
 * 缺点:线程非安全，多线程中可能会出现创建多个对象
 */
class LazyLoadSingleton private constructor() {

    companion object {
        //原生写法
        //LazyThreadSafetyMode.NONE 线程不安全
        val INSTANCE_1 by lazy(LazyThreadSafetyMode.NONE) {
            LazyLoadSingleton()
        }

        //翻译JAVA的写法
        private var INSTANCE_2: LazyLoadSingleton? = null

        fun getInstance(): LazyLoadSingleton {
            if (INSTANCE_2 == null) {
                INSTANCE_2 = LazyLoadSingleton()
            }
            return INSTANCE_2!!
        }
    }
}